<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>数组去重</title>
  </head>
  <body>
    <script>
      /**
       * 数组去重-方法1
       * */
      var array = [22, 22, 22, 444, 444, 555, 4444];
      var temp = []; // 定义一个新的临时数组
      for (var i = 0; i < array.length; i++) {
        //indexOf:如果要检索的元素没有出现，则该方法返回 -1
        if (temp.indexOf(array[i]) === -1) {
          temp.push(array[i]);
        }
      }
      console.log("数组去重-方法1=", temp);

      /**
       * 数组去重-方法2
       * */
      function unique(array) {
        //Set 对象允许你存储任何类型的 唯一值 ，无论是原始值或者是对象引用。
        //Set对象是值的集合，你可以按照插入的顺序迭代它的元素。
        //Set中的元素只会出现一次，即 Set 中的元素是唯一的。

        //通过Set对象，对数组去重，结果又返回一个Set对象
        //通过from方法，将Set对象转为数组
        return Array.from(new Set(array));
      }
      unique(array);
      console.log("数组去重-方法2=", unique2(array));

      /**
       * 数组去重-方法3
       * */
      function unique2(array) {
        //定义常量 res,值为一个Map对象实例
        const res = new Map();
        //返回arr数组过滤后的结果，结果为一个数组
        //过滤条件是，如果res中没有某个键，就设置这个键的值为1
        return array.filter((a) => !res.has(a) && res.set(a, 1));
      }
      unique2(array);
      console.log("数组去重-方法3=", unique(array));

      /**
       * 数组中的元素或对象去重
       */

      //去除数组中重复对象
      debuceObj = (array) => {
        var unique = {};
        array.forEach(function (a) {
          unique[JSON.stringify(a)] = 1;
        });
        array = Object.keys(unique).map(function (u) {
          return JSON.parse(u);
        });
        return array;
      };

      //从父数组中删除子数组中包含的元素
      deleteMultiRows = (parentArr, childArr) => {
        //从父数组中删除子数组中对应的数据
        for (let i = 0; i < childArr.length; i++) {
          for (let j = 0; j < parentArr.length; j++) {
            if (
              (childArr[i] && childArr[i].id) ==
              (parentArr[j] && parentArr[j].id)
            ) {
              let index = parentArr.indexOf(parentArr[j]);
              parentArr.splice(index, 1);
            }
          }
        }
        return parentArr;
      };
    </script>
  </body>
</html>
